『dbtで始めるデータパイプライン構築〜入門から実践〜』をdbt Core (CLI)で実施する

『dbtで始めるデータパイプライン構築〜入門から実践〜』をdbt Core (CLI)で実施する

Clock Icon2023.11.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部のueharaです。

今回は、『dbtで始めるデータパイプライン構築〜入門から実践〜』をdbt-core (CLI)で実施してみたいと思います。

はじめに

『dbtで始めるデータパイプライン構築〜入門から実践〜』は dbt-tokyo がzennで公開しているdbtを利用したデータパイプライン構築の入門資料です。

こちらの資料ではdbt Cloudを利用していますが、今回は dbt Core (CLI) を利用して同様の検証が可能な環境を構築したいと思います。

環境構築

BigQueryの準備

こちらは原著のBigQueryの準備と同様の作業を行います。

キー情報が含まれたJSONファイルをダウンロードした後は、自分が分かるところに保存しておいて下さい(後で使います)。

dbt Coreのセットアップ

原著ではdbt Cloudを利用していますが、冒頭で述べたようにここではdbt Core (CLI)を利用します。

Pythonがインストールされていることが前提で話を進めますので、インストールがまだの方は用意をお願いします。

dbtはHomebrewやdbtが既にインストールされたDocker Imageを使って利用することもできますが、今回は公式ドキュメントで recommended となっているpipによるインストールを行います。 (参考

まずは仮想環境を作成します。

$ python -m venv dbt-env

仮想環境を作成できたらアクティベートします。

$ source dbt-env/bin/activate

今回はBigQueryを利用するので、 dbt-bigquery をインストールします。

$ pip install dbt-bigquery

これでインストールは完了です。dbt --versionコマンドを実行し、適切にインストールできていることを確認します。

$ dbt --version              
Core:
  - installed: 1.7.2
  - latest:    1.7.2 - Up to date!

Plugins:
  - bigquery: 1.7.2 - Up to date!

プロジェクトの作成

環境構築ができたら、プロジェクトの作成を行います。

プロジェクト名をdbt_tutorialとすると、以下コマンドでプロジェクトの作成が開始できます。

$ dbt init dbt_tutorial

上記コマンドを実行すると対話形式で profiles.yml の作成をすることができます。

今回、設定値は以下の値にしてみました。

項目 設定値
Which database would you like to use? bigquery
Desired authentication method option service_account
keyfile (BigQueryの準備で用意したJSONファイルのpath)
project (GCP project id) (GCP project id)
dataset (the name of your dbt dataset) dbt_tutorial
threads (1 or more) 1
job_execution_timeout_seconds [300] 300
Desired location option (enter a number) US

設定が完了すると、 ~/.dbt/profiles.yml が作成されます。

$ cat ~/.dbt/profiles.yml                 
dbt_tutorial:
  outputs:
    dev:
      dataset: dbt_tutorial
      job_execution_timeout_seconds: 300
      job_retries: 1
      keyfile: (path of key file)
      location: US
      method: service-account
      priority: interactive
      project: (GCP project id)
      threads: 1
      type: bigquery
  target: dev

動かしてみる

作成したプロジェクト(今回は dbt_tutorial)のフォルダに移動します。

$ cd dbt_tutorial

直後のフォルダ構成は以下の通りです。

$ tree -L 1
.
├── README.md
├── analyses
├── dbt_packages
├── dbt_project.yml
├── logs
├── macros
├── models
├── seeds
├── snapshots
├── target
└── tests

あとは原著のdbt Cloud上での操作をローカルファイルに読み替えて実行します。

1点注意ですが、原著のテストテーブルの準備について、csvの格納フォルダが data になっていますが、これはdbt 1.0.0から seeds というフォルダに変更になっています。

したがって、raw_customers.csv, raw_orders.csv, raw_payments.csvは以下のように seeds フォルダに格納します。

ファイルを準備した後、 dbt seed コマンドを実行することで、テストテーブルの用意をすることができます。

$ dbt seed
06:33:47  Running with dbt=1.7.2
06:33:47  Registered adapter: bigquery=1.7.2
06:33:47  Unable to do partial parsing because profile has changed
06:33:48  Found 2 models, 3 seeds, 4 tests, 0 sources, 0 exposures, 0 metrics, 447 macros, 0 groups, 0 semantic models
06:33:48  
06:33:51  Concurrency: 1 threads (target='dev')
06:33:51  
06:33:51  1 of 3 START seed file dbt_tutorial.raw_customers .............................. [RUN]
06:33:57  1 of 3 OK loaded seed file dbt_tutorial.raw_customers .......................... [INSERT 100 in 6.57s]
06:33:57  2 of 3 START seed file dbt_tutorial.raw_orders ................................. [RUN]
06:34:03  2 of 3 OK loaded seed file dbt_tutorial.raw_orders ............................. [INSERT 99 in 5.45s]
06:34:03  3 of 3 START seed file dbt_tutorial.raw_payments ............................... [RUN]
06:34:10  3 of 3 OK loaded seed file dbt_tutorial.raw_payments ........................... [INSERT 113 in 6.77s]
06:34:10  
06:34:10  Finished running 3 seeds in 0 hours 0 minutes and 21.68 seconds (21.68s).
06:34:10  
06:34:10  Completed successfully
06:34:10  
06:34:10  Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3

BigQueryのコンソールを確認すると、きちんとテーブルが作成できていることが確認できました。

その他についても、原著の通りファイルを用意して dbt rundbt test コマンドを実行することでモデルの作成やテストを実行することができます。

最後に

今回は、今回は、『dbtで始めるデータパイプライン構築〜入門から実践〜』をdbt-core (CLI)で実施してみました。

参考になりましたら幸いです。

参考文献

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.